package com.android.support.lib.universal.base;

import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;

/**
 * BaseApplication子类类必须在AndroidManifest.xml中application指明，如下：
 * <p/>
 * <application android:name="BaseApplication子类全限名" >
 * 或：android:name="com.android.support.lib.universal.base.BaseApplication" 其本身。在moudle中或Library随便那个清单指明都可以。
 *
 * @author 彭治铭
 */
public class BaseApplication extends Application {

    private static BaseApplication sInstance;
    /**
     * 记录Activity的Class,调用 BaseApplication.activity=this.getClass();
     */
    public static Class<?> activity = null;

    public static BaseApplication getInstance() {
        return sInstance;
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        sInstance = this;
    }

    /**
     * 判断是否第一次启动
     * @return
     */
    public boolean BFirstOpen() {
        SharedPreferences preferences = this.getSharedPreferences(
                "application", 0);// 0是默认模式
        Boolean bool = preferences.getBoolean("BFirstOpen_2.0", true);
        if (bool) {
            SharedPreferences.Editor editor = preferences.edit();
            editor.putBoolean("BFirstOpen_2.0", false);
            editor.commit();
        }
        return bool;
    }

    /**
     * 退出程序
     */
    public static void baseExit() {

        try {
            BaseActivityManager.getInstance().finishAllActivity();// 销毁所有Acitivity,android的什么周期即结束
            // System.exit(0);杀进程,应用强制结束，参数0表示正常退出，其他参数表示非正常退出
            System.gc();// 垃圾回收,只是建议，JVM并不会立即执行。建议少用
            // finalize()就是一个对象的遗书，你把一个对象给杀了总的让他说点什么把。垃圾回收是不定时的,当一个对象被回收时，会调用该方法。
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
